# -*- coding: utf-8 -*-
"""
@Time ： 2023/4/11 22:07
@Auth ： Mr. William 1052949192
@Company ：特斯汀学院 @testingedu.com.cn
@Function ：迭代器与生成器
"""
"""
迭代器：
    是python中访问集合元素（集合是去重的）的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象，
    迭代器对象从集合中的第一个元素开始访问，直到所有元素被访问完，迭代器有两个方法：iter()和next()方法
"""
"""
生成器：
    python中的生成器是一种特殊的迭代器，可以使用yield语句来逐步产生一个序列，相对于一次性生成整个序列，
    生成器可以逐个生成数据，从而避免占用大量内存，提高程序的效率。
"""

import traceback


# my_list = [1, 2, 3, 4, 5]
#
# # 获取迭代器iter()
# my_list_iter = iter(my_list)
# for i in my_list_iter:
#     print(i)


# while True:
#     try:
# # 获取下一个next()
#         print(my_list_iter.__next__())
#     except:
#         print(traceback.format_exc())
#         break
#
# # 生成器
# def my_generator():
#     yield 1
#     yield 2
#     yield 3
#
# for s in my_generator():
#     print(s)
#
# # 生成的是列表[]
# # my_generator = [x**2 for x in range(5)]
# my_generator = (x**2 for x in range(5))
# print(type(my_generator))
# for s in my_generator:
#     print(s)

# 生成器: 每次迭代都会执行生成器函数，直到遇到yield语句，产生一个值并暂停执行
# 下次迭代时从yield语句的下一条语句继续执行
def my_generator3():
    print(11)
    yield 1
    print(22)
    yield 2
    print(33)
    yield 3
    print(44)

# # 最多打印3次
# ge = my_generator3()
# print(ge.__next__())
# print(ge.__next__())
# print(ge.__next__())
# print(ge.__next__())

ge = my_generator3()
for g in ge:
    print(g)
